perm filename GCREF.FAI[SYS,HE]4 blob sn#049226 filedate 1973-06-13 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00020 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002		TITLE	GCREF - MULTI FILE CREF LISTINGS
C00005 00003	GET THE COMMAND LINE AND PUT INTO THE COMMAND BUFFER
C00009 00004	 PROCESS A SWITCH IF / IS BREAK CHARACTER
C00012 00005	 NOW WE HAVE FINISHED SCANNING COMMAND LINE
C00014 00006	 FIND CORRECT PAGE OF FILE
C00017 00007	 HAVING FOUND CORRECT PAGE, SCAN IT AND BUILD DATA STRUCTURE
C00020 00008	 KEEP ON BUILDING STRUCTURE
C00023 00009	 END OF STRUCTURE BUILDING - NOW WE OUTPUT IT
C00025 00010	 RECURSIVE OUTPUT ROUTINE
C00029 00011	 GET ONE PART OF FILE SPECS
C00031 00012	 MAGIC DECIMAL CONVERSION ROUTINE 
C00033 00013	 STRING EQUALITY TEST
C00035 00014	 CREATE A NEW IDENTIFIER BLOCK
C00037 00015	 THIS IS THE MAGIC 6-STATE, TABLE DRIVEN, INPUT PARSER
C00040 00016	 MORE BRANCHES FOR INPUT SCANNER
C00042 00017	 STILL MORE BRANCHES
C00043 00018	 PRIMARY TABLE FOR INPUT SCANNER
C00045 00019	 MORE SECONDARY TABLES
C00047 00020	 FINISH WITH SOME VARIABLES
C00049 ENDMK
C⊗;
	TITLE	GCREF - MULTI FILE CREF LISTINGS
EXTERNAL JOBREL,JOBFF

P←17
PT←16;		CURRENT LINK POINTER
ST←15;		STATE
FR←14;		FREE STORAGE POINTER
CONV←13;	ARGUMENT FOR CONVRT
TA←12;		T AND TA MUST BE CONSECUTIVE
T←11
NEW←10;		POINTER TO NEW BLOCK
INP←7;		INPUT POINTER
NBUF←4;		# OF I/O BUFFERS
PLEN←40;	LENGTH OF STACK

;FIRST WE INITIALIZE THE WORLD EVERYTIME WE START A NEW COMMAND

	SKIPE SVJOB
	JRST [	MOVE SVJOB		;THIS CORE IMAGE ALREADY RAN
		MOVEM JOBFF		;RESTORE JOBFF
		JRST GCREF]
	MOVE JOBFF			;OTHERWISE,
	MOVEM SVJOB#			;SAVE JOBFF FOR INITIALIZATION
GCREF:	MOVE P,[IOWD PLEN,PDL]		;INIT STACK
	SETZM SHORT			;INIT FLAGS - SHORT LISTING
	SETZM GLBAL			;	GLOBALS ONLY
	SETZM LOCAL			;	LOCALS ONLY
	SETZM OUTPNT			;INIT POINTERS - DEFAULT OUTPUT FILE
	SETZM INPNT			;	START OF INPUT FILES
	HRRZ FR,JOBFF			;	START OF FREE STORAGE-1
	SETZM STRUCT			;	START OF DATA STRUCTURE
	SETZM DEFPPN
	HRLZI 'CRF'
	MOVEM DEFEXT
	SETZM ERROR			; ERROR FLAG
	MOVE 1,JOBREL			; START WITH 1K OF FREE CORE
	ADDI 1,2000
	CALLI 1,11
	JRST NOCORE
	INIT 1,				; OPEN DISK
	SIXBIT .DSK.
	XWD OBUF,IBUF
	JRST [ OUTSTR [ASCIZ . NO DISK.]
	       CALLI 12]
	OUTSTR CRLF
	OUTCHR ["*"]			;TELL HIM WE ARE READY
;GET THE COMMAND LINE AND PUT INTO THE COMMAND BUFFER

COMGET:	MOVE 1,COMPNT			; READ LINE INTO COMMAND BUFFER
	INCHWL 2
	IDPB 2,1
	CAIE 2,15			; UNTIL CARRIAGE RETURN
	JRST .-3
	SETZM 2				;CONVERT TO ASCIZ
	IDPB 2,1
	CLRBFI				;FLUSH LINE FEED FROM BUFFER

; SCAN COMMAND LINE FOR FILE NAME OR SWITCH
	
	MOVE 1,COMPNT
	SETZM 4
GETFIL:	SETZM NAME
	MOVE 2,[POINT 7,NAME]		;  GET NEXT FILE SPECS
	PUSHJ P,GETPAR			;	LOOK FOR FILE NAME
	SKIPN SNAM
	JRST SPCERR
	PUSH FR,SNAM
	MOVEI PT,(FR)
	CAIE 4,"."
	JRST [PUSH FR,DEFEXT		;	NO EXTENSION GIVEN
	      JRST ENDEXT]
	IDPB 4,2
	PUSHJ P,GETPAR			;   	LOOK FOR EXTENSION
	PUSH FR,SNAM
	MOVE SNAM
	TRNE 777777
	JRST SPCERR			;	EXTENSION TOO LONG
	MOVEM DEFEXT			;	NEW DEFAULT
ENDEXT:	PUSH FR,[0]			;	THIS IS A LOOKUP BLOCK
	CAIE 4,"["
	JRST [PUSH FR,DEFPPN		;	NO PPN GIVEN
	      JRST ENDPPN]
	IDPB 4,2
	PUSHJ P,GETPAR			;	GET PPN
	SKIPN 6,SNAM
	JRST SPCERR
	TLNN 6,77			;	RIGHT ADJUSTED
	JRST [LSH 6,-6
	      JRST .-1]
	PUSH FR,6
	HLLM 6,DEFPPN
	CAIE 4,","
	JRST SPCERR
	IDPB 4,2
	PUSHJ P,GETPAR			;	GET REST OF PPN
	SKIPN 6,SNAM
	JRST SPCERR
	TLNN 6,77			;	ALSO RIGHT ADJUSTED
	JRST [LSH 6,-6
	      JRST .-1]
	HLRM 6,(FR)
	HLRM 6,DEFPPN
	IDPB 4,2
	CAIN 4,"]"
	JRST [	ILDB 4,1		; GET NEXT BREAK CHARACTER
		JRST ENDPPN]
SPCERR:	OUTSTR CRLF
	OUTSTR [ASCIZ .ILLEGAL FILE SPECIFICATION .]
	OUTSTR NAME
IGLOUT:	OUTSTR CRLF
	JRST GCLOOP